Shallow copy vs deep copy in c